/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Interface;

import Negocio.*;
import Persistencia.DAOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author v3550
 */
public class CadastroControlador {
    private CadastroFachada fachada;
   
    private ListModelUsuario modelTextoUsuario;
    private ComboModelUsuario modelTextoCbUsuario; 
    
    private ListModelCategoria modelTextoCategoria;
    private ComboModelCategoria modelTextoCbCategoria; 
    
    private ListModelArtigo modelTextoArtigo;
    private ListModelArtigoAberto modelTextoArtigoAberto;
    private ListModelArtigoFechado modelTextoArtigoFechado;
    
    private ListModelLance modelTextoLance;
    private Artigo artigoAtual;
   
    
    public CadastroControlador(Artigo a) throws CadastroException, DAOException, Exception {
        this.artigoAtual = a;
        fachada = new CadastroFachada();
        List<Lance>    ll = fachada.BuscarLance(artigoAtual);  
        modelTextoLance  = new ListModelLance(ll);
        List<Usuario> lu = fachada.BuscarUsuariosParaLance(artigoAtual);
        modelTextoCbUsuario = new ComboModelUsuario(lu);
      
    }
    
    public CadastroControlador() throws CadastroException, DAOException,Exception {
        fachada = new CadastroFachada();
        
        List<Categoria> lc = fachada.BuscarCategorias();
        List<Usuario>   lu = fachada.BuscarUsuarios();
        List<String>   la = fachada.BuscarArtigos();
        List<Artigo>   laA = fachada.BuscarArtigosAberto();
        List<Artigo>   laF = fachada.BuscarArtigosFechado();
        
        
        modelTextoUsuario     = new ListModelUsuario(toListString(lu));
        //modelTextoCbUsuario   = new ComboModelUsuario(toListString(lu));
        modelTextoCbUsuario   = new ComboModelUsuario(lu);
        
        modelTextoCategoria   = new ListModelCategoria(toListString(lc));
        //modelTextoCbCategoria = new ComboModelCategoria(toListString(lc));
        
        modelTextoCbCategoria = new ComboModelCategoria(lc);
        modelTextoArtigo = new ListModelArtigo(toListString(la));

        modelTextoArtigoAberto = new ListModelArtigoAberto(laA);
        modelTextoArtigoFechado= new ListModelArtigoFechado(laF);

    }
    
    public Artigo getAtual()
    {
        return artigoAtual;
    }
    
    
    public javax.swing.ListModel<String> getListaUsuario(){
        return modelTextoUsuario;
    }
   
    public javax.swing.ListModel<String> getListaCategoria(){
        return modelTextoCategoria;
    }
    public javax.swing.ListModel<String> getListaArtigo(){
        return modelTextoArtigo;
    }
    
    public javax.swing.ComboBoxModel<Categoria> getListaCategoriaCombo(){
        return modelTextoCbCategoria;
    }

    public javax.swing.ComboBoxModel<Usuario> getListaUsuarioCombo(){
        return modelTextoCbUsuario;
    }
    public javax.swing.ListModel<Artigo> getListaArtigoAberto(){
        return modelTextoArtigoAberto;
    }
    public javax.swing.ListModel<Artigo> getListaArtigoFechado(){
        return modelTextoArtigoFechado;
    }
    
    public javax.swing.ListModel<Lance> getListaLance(){
        return modelTextoLance;
    }
   
    private List<String> toListString(List<?> listaOrigem) {
        List<String> listaDestino = new ArrayList<String>(listaOrigem.size());
        for(Object p : listaOrigem) {
            listaDestino.add(p.toString());
        }
        return listaDestino;
    }
    
    public boolean cadastrarCategoria(String nome) throws CadastroException
    {
        //adicionar o listener  para categoria
        fachada.addCadastroListener(modelTextoCategoria);  // list
        fachada.addCadastroListener(modelTextoCbCategoria); // combo
        
        Categoria categoria = fachada.adicionarCategoria(nome);

        fachada.removeCadastroListener(modelTextoCategoria);
        fachada.removeCadastroListener(modelTextoCbCategoria);

        if(categoria != null)
        {
            return true;
        }
        return false;
    }
    
    public boolean cadastrarUsuario(String nome, String email) throws CadastroException
    {
        //adicionar o listener para o usuário 
        fachada.addCadastroListener(modelTextoUsuario);  // list
        fachada.addCadastroListener(modelTextoCbUsuario); // combo  
         
        Usuario user = fachada.adicionarUsuario(nome, email);
        
        fachada.removeCadastroListener(modelTextoUsuario);
        fachada.removeCadastroListener(modelTextoCbUsuario);
        
        if(user != null) {
            return true;
        }
         else {
            return false;
        }
    }
    
    public boolean adicionarArtigo(String nome, String user, String categ, String qtd, String dtIni, String dtFim, String hrIni, String HrFim , String vlr , String politicaVencedor) throws DAOException, CadastroException, ParseException
    {
        fachada.addCadastroListener(modelTextoArtigo);  // list
        
        Artigo artigo = fachada.adicionarArtigo(nome, user, categ, qtd, dtIni, dtFim, hrIni, HrFim , vlr , politicaVencedor); 
        
        fachada.removeCadastroListener(modelTextoArtigo);
        
        if(artigo != null){ 
            return true;
        }
         else {
            return false;
        }
    }
    

    public boolean adicionarLance(String idU, String valorLance, int artigo, double lastLance) throws CadastroException, DAOException {
        
        fachada.addCadastroListener(modelTextoLance); 
        Lance lance = fachada.adicionarLance(idU, valorLance, artigo, lastLance);
        fachada.removeCadastroListener(modelTextoLance);
        
        if(lance != null){ 
            return true;
        }
         else {
            return false;
        }
    }

    public double getLanceMinimo(Artigo a) throws DAOException 
    {
        return fachada.getValorMinimoLance(a);
    }
    
   
    public Lance lanceVencedor(Artigo a) throws DAOException
    {
       return fachada.getLanceVencedor(a);
    }
    
    public boolean fecharLeilao(int a) throws DAOException
    {
       return fachada.encerrarLeilao(a);
    }

           
}
